const express = require('express')
const session = require('express-session')
const path = require('path')

// 导入数据解析插件
const { urlencoded } = require('body-parser')

// 创建服务器
const app = express();

// 引入模板引擎
require('./utils/art-template').artTemplate(app);

// 连接数据库
require('./utils/connect');

// 导入用户集合
require('./model/User')

// 设置公用静态资源
app.use('/static', express.static(path.join(__dirname, 'public')));

app.use(urlencoded({ extended: false }));

// 获取请求头cookie中的sessionId
// 如果携带了sessionId，就会搜索匹配的session，
// 如果找到了，就赋值给req.session
// 如果找不到，req.session就赋值为null
// 如果没有携带sessionId，就会创建一个空的session，并赋值给req.session，将sessionId设置在响应头的cookie中
app.use(session({
    secret: 'blog-demo',
    // false的意思是：如果创建的session中没有保存任何数据，就不要保存cookie了
    saveUninitialized: true,
    rolling: true, // 可以刷新cookie的有效时间 默认false
    cookie: {
        // 过期时间，如果不设置，默认是在关闭浏览器时，单位：毫秒
        maxAge: 24 * 60 * 60 * 1000
    }
}))
// 登录拦截  中间件拦截/admin开头的请求
// 注意（神坑）：如果加了一级路由，那么req.url是从二级路由开始的，也就是在访问，/admin/user/login时，  req.url 是从 /user/login 开始的
app.use('/admin', require('./middleware/login').middleware)
app.use(require('./middleware/locals-data').middleware)

// 相应路由匹配路径
app.use(require('./route/common').router);
app.use('/home', require('./route/home').router);
app.use('/admin', require('./route/admin').router);

// 监听端口
app.listen(8080);
console.log('服务器启动成功');
console.log('http://localhost:8080/login');
